﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Cotizav.CONEXION;

namespace Cotizav.PRESENTACION.DialogBox
{
    public partial class DialogSearchObject : Form
    {
        private string nameParameter;
        private Dictionary<string, string> listBusquedaPor;

        private CtrlEquipo ctEquipo;
        private CtrlClientes ctCliente;

        private Object result;

        private string resultadoBusqueda;

        public string ResultadoBusqueda
        {
            get { return resultadoBusqueda; }
            set { resultadoBusqueda = value; }
        }
        
        public DialogSearchObject()
        {
            InitializeComponent();
            listBusquedaPor = new Dictionary<string, string>();
            ctEquipo = new CtrlEquipo();
            ctCliente = new CtrlClientes();
        }

        public DialogSearchObject(string nombreParametro) : this()
        {
            nameParameter = nombreParametro;            
        }

        private void DialogSearchObject_Load(object sender, EventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(nameParameter))
            {
                switch (nameParameter)
                {
                    case "Equipo":
                        this.cargarListaBusqueda();
                        cmBuscarPor.DataSource = new BindingSource(listBusquedaPor,null);
                        cmBuscarPor.ValueMember = "Key";
                        cmBuscarPor.DisplayMember = "Value";
                        break;        
                    case "Cliente":
                        this.cargarListaBusqueda();
                        cmBuscarPor.DataSource = new BindingSource(listBusquedaPor, null);
                        cmBuscarPor.ValueMember = "Key";
                        cmBuscarPor.DisplayMember = "Value";
                        break;
                }
            }
        }

        private void cargarListaBusqueda()
        {
            switch (nameParameter)
            {
                case "Equipo":
                    //añadimos las columnas de búsqueda
                    listBusquedaPor.Add("nombreEquipo", "Nombre de equipo");
                    listBusquedaPor.Add("codigo", "Código");
                    listBusquedaPor.Add("serie", "Serie");
                    break;
                case "Cliente":
                    //añadidom las columnsa de búsqueda
                    listBusquedaPor.Add("razonSocial", "Razón social");
                    listBusquedaPor.Add("clienteruc", "R.U.C.");
                    break;
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            if (cmBuscarPor.SelectedIndex >= 0)
            {
                switch (nameParameter)
                {
                    case "Equipo":
                        string argumentoEquipo = cmBuscarPor.SelectedValue.ToString();
                        result = ctEquipo.buscarEquipo(argumentoEquipo, txtValor.Text);
                        break;
                    case "Cliente":
                        string argumentoCliente = cmBuscarPor.SelectedValue.ToString();
                        result = ctCliente.buscarClienteDentro(argumentoCliente, txtValor.Text);
                        break;
                }

                gridResultado.DataSource = null;
                gridResultado.DataSource = result;// as List<EQUIPO>;
                setReadOnlyRows();
            }
        }

        private void gridResultado_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            if (gridResultado.DataSource != null)
            {
                switch (nameParameter)
                {
                    case "Equipo":
                        gridResultado.Columns["idEquipo"].Visible = false;
                        gridResultado.Columns["nombreEquipo"].HeaderText = "Equipo";
                        gridResultado.Columns["codigo"].HeaderText = "Código";
                        gridResultado.Columns["serie"].Visible = false;
                        gridResultado.Columns["año"].Visible = false;
                        gridResultado.Columns["cantidad"].Visible = false;
                        gridResultado.Columns["horas"].Visible = false;
                        gridResultado.Columns["esalquiler"].Visible = false;
                        gridResultado.Columns["esventa"].Visible = false;
                        gridResultado.Columns["valorVenta"].Visible = false;
                        gridResultado.Columns["idSucursal"].Visible = false;
                        gridResultado.Columns["idlistaTarifa"].Visible = false;
                        gridResultado.Columns["idModelo"].Visible = false;
                        gridResultado.Columns["eliminado"].Visible = false;
                        gridResultado.Columns["marca"].Visible = false;
                        gridResultado.Columns["fechaRegistro"].Visible = false;
                        gridResultado.Columns["fechaModificacion"].Visible = false;
                        gridResultado.Columns["MODELO"].Visible = false;
                        gridResultado.Columns["SUCURSAL"].Visible = false;
                        break;

                    case "Cliente":
                        gridResultado.Columns["idCliente"].Visible = false;
                        gridResultado.Columns["direccion"].Visible = true;
                        gridResultado.Columns["direccion"].HeaderText = "Dirección";
                        gridResultado.Columns["direccion"].DisplayIndex = 3;
                        gridResultado.Columns["provincia"].Visible = false;
                        gridResultado.Columns["email"].Visible = false;
                        gridResultado.Columns["razonSocial"].Visible = true;
                        gridResultado.Columns["razonSocial"].HeaderText = "Cliente";
                        gridResultado.Columns["razonSocial"].DisplayIndex = 2;
                        gridResultado.Columns["idcategoria"].Visible = false;
                        gridResultado.Columns["idsector"].Visible = false;
                        gridResultado.Columns["idDistrito"].Visible = false;
                        gridResultado.Columns["idSucursal"].Visible = false;
                        gridResultado.Columns["clienteruc"].Visible = true;
                        gridResultado.Columns["clienteruc"].HeaderText = "R.U.C.";
                        gridResultado.Columns["clienteruc"].DisplayIndex = 1;
                        gridResultado.Columns["telefono"].Visible = false;
                        gridResultado.Columns["eliminado"].Visible = false;
                        gridResultado.Columns["idVendedor"].Visible = false;
                        gridResultado.Columns["fechaRegistro"].Visible = false;
                        gridResultado.Columns["fechaModificacion"].Visible = false;
                        gridResultado.Columns["registradoPor"].Visible = false;
                        gridResultado.Columns["VENDEDOR"].Visible = false;
                        gridResultado.Columns["DISTRITO"].Visible = false;
                        gridResultado.Columns["CATEGORIA"].Visible = false;
                        gridResultado.Columns["SECTOR"].Visible = false;                        
                        break;
                }
            }
        }

        internal void setReadOnlyRows()
        {
            if(gridResultado.Rows.Count > 0)
            {
                foreach (DataGridViewRow dr in gridResultado.Rows)
                {
                    dr.ReadOnly = true;
                }
            }
        }

        private void gridResultado_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (gridResultado.Rows.Count > 0)
            {
                int selectedRow = e.RowIndex;

                if (selectedRow >= 0)
                {
                    switch (nameParameter)
                    {
                        case "Equipo":
                            ResultadoBusqueda = gridResultado.Rows[selectedRow].Cells["idEquipo"].Value.ToString();
                            this.DialogResult = DialogResult.OK;
                            break;
                        case "Cliente":
                            ResultadoBusqueda = gridResultado.Rows[selectedRow].Cells["idCliente"].Value.ToString();
                            this.DialogResult = DialogResult.OK;
                            break;
                    }

                }
            }
        }

        private void txtValor_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return)
            {
                btnBuscar_Click(sender, EventArgs.Empty);
            }
        }
    }
}
